// 计算正方形面积
// 计算创建正方形对象，可以给构造器传递宽和高
// 也可以给构造器传递一个包含了宽和高的形状参数对象，这样需要用构造器重载

type type_ChartParam = {
  width?: number;
  height?: number;
  radius?: number;
};

class Square {
  public width: number;
  public height: number;

  constructor(width_: number, height_: number); // 重载签名
  constructor(paramObj: type_ChartParam);
  // 实现签名
  // constructor(value: number | type_ChartParam) { // 这里联合类型不能将 value 赋值给 this.width
  // constructor(valueOrWidth: any, height_?: number) { // ? 可选参数【可选参数的适配请看 chart1.ts】
  constructor(valueOrWidth_: any, height_: number = 0) {
    if(typeof valueOrWidth_ === "object"){
      this.width = valueOrWidth_.width;
      this.height = valueOrWidth_.height;
    }else{
      this.width = valueOrWidth_;
      this.height = height_;
    }

  }

  public getArea(): number {
    return this.width * this.height;
  }
}

let square = new Square(40, 50);
console.log(square.getArea());

let chartParamObj: type_ChartParam = { width: 50, height: 90 };
let square2 = new Square(chartParamObj);
console.log(square2.getArea());
